#include "traductor.h"

using namespace std;

const char * const Traductor::registro_[]  = {"A", "B", "C", "D", "E", "H", "L", "M"};
const char Traductor::digito_[] = "0123456789ABCDEF";

void Traductor::traducir(Instruccion instruccion)
{
	switch (instruccion.getTipo()) {
		case MOV:
			traduccion_ = "MOV ";
			traduccion_.append(toString(instruccion.getDestino()));
			traduccion_.append(", ");
			traduccion_.append(toString(instruccion.getOrigen()));
			break;
		case MVI:
			traduccion_ = "MVI ";
			traduccion_.append(toString(instruccion.getRegistro()));
			traduccion_.append(", ");
			traduccion_.append(toString(instruccion.getValorInmediato16()));
			break;
		default:
			traduccion_ = "No soportada";
			break;
	}
}

string Traductor::getTraduccion()
{
	return traduccion_;
}

string Traductor::toString(Registro registro)
{
	return registro_[registro];
}

string Traductor::toString(byte t)
{
	string s = "0";
	s += digito_[(t >> 4 & 0xF)];
	s += digito_[(t & 0xF)];
	s += 'H';
	return s;
}

string Traductor::toString(word t)
{
	string s = "0";
	s += digito_[(t >> 12 & 0xF)];
	s += digito_[(t >> 8 & 0xF)];
	s += digito_[(t >> 4 & 0xF)];
	s += digito_[(t & 0xF)];
	s += 'H';
	return s;
}
